#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;//顺序表内元素个数
typedef struct Table{
    int *head;
    int length;
    int size;
}Table;
//初始化顺序表
Table initTable(){
    Table t;//结构体变量t
    t.head = malloc(5*sizeof(int ));
    //判断开辟空间是否成功
    if(!t.head){
        printf("初始化失败");
        exit(0);
    }
    t.length = 0;
    t.size=Size;
    return t;
}
//打印显示顺序表的函数displayTable
void displayTable(Table t){
    for(int i=0;i<t.length;i++){
        printf("%d  ",t.head[i]);
    }
    printf("\n");
}
//删除元素方法delTable
Table delTable(Table t,int num){
    //t代表函数调用时传进来的顺序表，num代表要删除的那个数的位置
    if(num>t.length||num<1){
        printf("被删除的元素的位置有问题\n");
        return t;
    }//当删除元素位置没有问题的时候执行下列代码
    for(int i=num;i<5;i++){
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}
//在给定位置插入元素
Table addTable(Table t,int i,int j){
    if(i>t.length||i<1){
        printf("被插入的元素的位置有问题\n");
        return t;
    }
    if(t.length>=t.size){
        t.head = realloc(t.head,(t.size+1)*sizeof(int));
        if(!t.head){
            printf("空间分配失败\n");
        }
    }
    //空间容量size+1
    t.length++;
    for(int k=t.length-1;k>=1;k--){
        t.head[k]=t.head[k-1];
    }
    t.head[i-1]=j;
}
//指定位置改变元素
Table gaiTable(Table t,int i,int j){
    if(i>t.length||i<1){
        printf("要改变的元素的位置有问题\n");
        return t;
    }
    t.head[i-1]=j;
}
//查找元素
int main(){
    Table t1 = initTable();
    for (int i=0;i<5;i++){
        t1.head[i]=i;
        t1.length++;
    }
    printf("打印顺序表：\n");
    displayTable(t1);
    int num;
    printf("请输入要删除第几个数：");
    scanf("%d",&num);
    Table t2=delTable(t1,num);
    displayTable(t2);
    printf("请输入要插入的位置和元素：");
    int i,j;
    scanf("%d,%d",&i,&j);
    addTable(t1,i,j);
    displayTable(t1);
    printf("请输入要改变的元素的位置和值：");
    int a,b;
    scanf("%d,%d",&a,&b);
    gaiTable(t1,a,b);
    displayTable(t1);
    printf("请输入要查找的元素位置：");
    int c,d;
    scanf("%d",&c);
    printf("%d",t1.head[c-1]);
}